/*
 *  Copyright 2019-2020
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package cn.cdeden.common.core.config;


import cn.cdeden.common.core.utils.ElAdminConstant;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.File;

/**
 * @author
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "file")
public class FileProperties {


    /** 文件大小限制 */
    private Long maxSize;

    /** 头像大小限制 */
    private Long avatarMaxSize;

    private ElPath mac;

    private ElPath linux;

    private ElPath windows;

    @Bean
    public ElPath getFilePath(){
        System.out.println("启动是初始化文件夹路径");
        String os = System.getProperty("os.name");
        if(os.toLowerCase().startsWith(ElAdminConstant.WIN)) {
            System.err.println("文件-windows--" +windows);
            setFolder(windows);
            return windows;
        } else if(os.toLowerCase().startsWith(ElAdminConstant.MAC)){
            setFolder(mac);
            return mac;
        }else {
            setFolder(linux);
            return linux;
        }
    }


    public ElPath getPath(){
        String os = System.getProperty("os.name");
        if(os.toLowerCase().startsWith(ElAdminConstant.WIN)) {
//            System.err.println("abc-windows--" +windows);
            windows.setSysMachineCode("");
            return windows;
        } else if(os.toLowerCase().startsWith(ElAdminConstant.MAC)){
            return mac;
        }else {
            return linux;
        }
    }


    void setFolder(ElPath folder){
        createFolder(folder.path);//设置 文件 文件夹
        createFolder(folder.path+"sys"+File.separator+"data"+File.separator+"config"+File.separator);//设置 系统配置文件 文件夹
        createFolder(folder.avatar);//设置 头像 文件夹
        createFolder(folder.tmp+"upload"+File.separator);//设置 临时 上传文件夹
        createFolder(folder.tmp+"download"+File.separator);//设置 临时 上传文件夹
        createFolder(folder.tmp+"turn"+File.separator);//设置 临时 上传文件夹
        createFolder(folder.tmp+ File.separator);//设置 临时 文件夹
        createFolder(folder.pagepath+"lic"+File.separator);  // pageOffice 使用
        createFolder(folder.pagepath+"poseal"+File.separator);  // pageOffice 使用
        createFolder(folder.pagepath+"file"+File.separator);  // pageOffice 使用
    }

    @Data
    public static class ElPath{

        private String path;

        private String avatar;

        //临时文件
        private String tmp;
        //pageOffice
        private String pagepath;

        private String sysMachineCode;




        //
        public String getTmp(String type) {
            return tmp;
        }
    }

    /**
     * @param dirFile //只传文件夹路径
     * @return void
     * @author Yu.
     * @Description // 检查文件是否存在不存在就创建他
     * @Date 2022/12/2 11:10
     **/
    public static void createFolder(String dirFile) {
        if (dirFile.charAt(dirFile.length() - 1) == '/' || dirFile.charAt(dirFile.length() - 1) == '\\') { //s.length()-1获取字符串最后一位字符的索引，传入charAt方法获取索引对应的字符，判断是否为
//            System.out.println(dirFile.substring(0, dirFile.length()-1)); //，则通过substring截取需要的值
            dirFile = dirFile.substring(0, dirFile.length() - 1);
        }
        if (dirFile.contains("\\")) {
            dirFile = dirFile.replace("\\", "/");
        }

        File file = new File(dirFile + "/123.txt");
//        File file = new File(dirFile);
        if (file.exists()) {
//            log.info("文件夹存在");
        } else {
            //getParentFile() 获取上级目录(包含文件名时无法直接创建目录的)
            boolean b = !file.getParentFile().exists();
            if (b) {
                System.out.printf("不存在 创建上级目录.." + dirFile);
                //创建上级目录
                file.getParentFile().mkdirs();
            } else {
                System.out.printf("文件存在目录.." + dirFile);
            }
        }
    }
}
